package com.zjl.redis.第14章_大数据统计;

/**
 * 经纬线：
 *      经线：南北走向，子母线，伦敦经线为0，也称本初子母线
 *      纬线：东西走向
 *              赤道是最大的纬线
 *
 * 根据偶数位放经度，奇数位放纬度（0被视为偶数）
 */
public class B1_GEO详解 {
    public static void main(String[] args) {
        int x = 0b011001;//经度
        int y = 0b010101;//纬度

        long hs = GEO2_1(x, y);
        System.out.println(Long.toBinaryString(hs));
        int[] geo = GEO1_2(hs);
        System.out.println("经度：" + Long.toBinaryString(geo[0]));
        System.out.println("纬度：" + Long.toBinaryString(geo[1]));

    }

    private static long GEO2_1(int x, int y) {
        long re = 0;
        int yd = 0;
        while (x != 0 || y != 0) {
            re += (x & 1) << yd++;
            re += (y & 1) << yd++;
            x >>= 1;
            y >>= 1;
        }
        return re;
    }

    private static int[] GEO1_2(long hs) {
        int[] zw = new int[]{0, 0};
        int w = 0;
        while (hs != 0) {
            zw[0] += (hs & 1) << w;
            hs >>= 1;
            zw[1] += (hs & 1) << w;
            hs >>= 1;
            w++;
        }
        return zw;
    }
}
